#!/usr/bin/env node

// 虚构电影数据库管理工具
// 主入口文件

const DataController = require('./data-controller')

// 命令行参数解析
function parseArgs() {
  const args = process.argv.slice(2)
  const command = args[0]
  const options = {}
  
  // 解析选项
  for (let i = 1; i < args.length; i++) {
    const arg = args[i]
    if (arg.startsWith('--')) {
      const [key, value] = arg.slice(2).split('=')
      options[key] = value || true
    } else if (arg.startsWith('-')) {
      const key = arg.slice(1)
      const value = args[i + 1] && !args[i + 1].startsWith('-') ? args[i + 1] : true
      options[key] = value
      if (value !== true) i++
    }
  }
  
  return { command, options }
}

// 显示帮助信息
function showHelp() {
  console.log(`
🎬 虚构电影数据库管理工具

使用方法:
  node index.js <命令> [选项]

命令:
  test                测试数据库连接
  basic              创建基础数据（用户和标签）
  generate           生成完整数据（电影和评论）
  all                一键创建所有数据
  clear              清空所有数据
  stats              显示系统统计信息
  check              检查数据完整性
  help               显示此帮助信息

选项:
  --movies, -m <数量>    指定电影数量（默认: 10）
  --comments, -c <数量>  指定评论数量（默认: 50）
  --force, -f           强制操作（不询问确认）

示例:
  node index.js test
  node index.js basic
  node index.js generate --movies 20 --comments 100
  node index.js all -m 15 -c 75
  node index.js clear --force
  node index.js stats
  node index.js check

环境变量:
  请确保在 .env 文件中设置:
  SUPABASE_URL=your-supabase-project-url
  SUPABASE_SERVICE_ROLE_KEY=your-service-role-key
`)
}

// 确认操作
async function confirmAction(message) {
  const readline = require('readline')
  const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
  })
  
  return new Promise((resolve) => {
    rl.question(`${message} (y/N): `, (answer) => {
      rl.close()
      resolve(answer.toLowerCase() === 'y' || answer.toLowerCase() === 'yes')
    })
  })
}

// 主函数
async function main() {
  const { command, options } = parseArgs()
  const controller = new DataController()
  
  try {
    switch (command) {
      case 'test':
        await controller.testConnection()
        break
        
      case 'basic':
        console.log('🚀 创建基础数据...')
        const basicResult = await controller.createBasicData()
        if (!basicResult.success) {
          console.error('❌ 创建基础数据失败:', basicResult.error)
          process.exit(1)
        }
        break
        
      case 'generate':
        const movieCount = parseInt(options.movies || options.m) || 10
        const commentCount = parseInt(options.comments || options.c) || 50
        
        console.log(`🎬 生成完整数据 (电影: ${movieCount}, 评论: ${commentCount})...`)
        const generateResult = await controller.generateFullData(movieCount, commentCount)
        if (!generateResult.success) {
          console.error('❌ 生成完整数据失败:', generateResult.error)
          process.exit(1)
        }
        break
        
      case 'all':
        const allMovieCount = parseInt(options.movies || options.m) || 10
        const allCommentCount = parseInt(options.comments || options.c) || 50
        
        console.log(`🎯 一键创建所有数据 (电影: ${allMovieCount}, 评论: ${allCommentCount})...`)
        const allResult = await controller.createAllData(allMovieCount, allCommentCount)
        if (!allResult.success) {
          console.error('❌ 创建所有数据失败:', allResult.error)
          process.exit(1)
        }
        break
        
      case 'clear':
        if (!options.force && !options.f) {
          const confirmed = await confirmAction('⚠️  此操作将清空所有数据，确定要继续吗？')
          if (!confirmed) {
            console.log('❌ 操作已取消')
            process.exit(0)
          }
        }
        
        console.log('🗑️  清空所有数据...')
        const clearResult = await controller.clearAllData()
        if (!clearResult.success) {
          console.error('❌ 清空数据失败:', clearResult.error)
          process.exit(1)
        }
        break
        
      case 'stats':
        await controller.getSystemStats()
        break
        
      case 'check':
        const checkResult = await controller.checkDataIntegrity()
        if (!checkResult.success) {
          console.error('❌ 检查数据完整性失败:', checkResult.error)
          process.exit(1)
        }
        
        if (checkResult.valid) {
          console.log('\n✅ 数据完整性检查通过')
        } else {
          console.log('\n❌ 数据完整性检查失败')
          process.exit(1)
        }
        break
        
      case 'help':
      case '--help':
      case '-h':
        showHelp()
        break
        
      default:
        console.error('❌ 未知命令:', command)
        console.log('使用 "node index.js help" 查看帮助信息')
        process.exit(1)
    }
    
    console.log('\n✅ 操作完成')
    
  } catch (error) {
    console.error('❌ 执行过程中发生错误:', error)
    process.exit(1)
  }
}

// 如果直接运行此脚本
if (require.main === module) {
  main()
}

module.exports = {
  DataController,
  main
}
